@use '../variables';
@use './variables' as avatar-variables;

$block: '.#{variables.$ns}avatar';

#{$block} {
    --_--size: #{avatar-variables.$default-size};
    --_--border-width: 2px;
    --_--border-radius: 50%;
    --_--inner-border-width: 3px;
    --_--border-color: currentColor;
    --_--background-color: var(--g-color-base-misc-light);
    --_--text-color: var(--g-color-text-misc);
    --_--font-weight: var(--g-text-body-font-weight);
    --_--font-size: var(--g-text-body-1-font-size);
    --_--line-height: var(--g-text-body-1-line-height);

    overflow: hidden;
    display: inline-flex;
    justify-content: center;
    align-items: center;
    width: var(--g-avatar-size, var(--_--size));
    height: var(--g-avatar-size, var(--_--size));
    border-radius: var(--_--border-radius);
    background-color: var(--g-avatar-background-color, var(--_--background-color));

    &_with-border,
    &_view_outlined {
        position: relative;

        &::before,
        &::after {
            content: '';
            z-index: 1;
            position: absolute;
            inset: 0;
            border-radius: var(--_--border-radius);
        }

        &::before {
            border: var(--g-avatar-inner-border-width, var(--_--inner-border-width)) solid
                var(--g-color-base-background);
        }

        &::after {
            border: var(--g-avatar-border-width, var(--_--border-width)) solid
                var(--g-avatar-border-color, var(--_--border-color));
        }
    }

    &_shape {
        &_circle {
            --_--border-radius: 50%;
        }

        &_square {
            &#{$block}_size {
                &_3xs,
                &_2xs,
                &_xs {
                    --_--border-radius: var(--g-border-radius-xs);
                }

                &_s {
                    --_--border-radius: var(--g-border-radius-s);
                }

                &_m {
                    --_--border-radius: var(--g-border-radius-m);
                }

                &_l {
                    --_--border-radius: var(--g-border-radius-l);
                }

                &_xl {
                    --_--border-radius: var(--g-border-radius-xl);
                }
            }
        }
    }

    &_size {
        @each $size-name, $size-value in avatar-variables.$sizes {
            &_#{$size-name} {
                --_--size: #{$size-value};
            }
        }

        &_3xs,
        &_2xs,
        &_xs {
            --_--font-weight: var(--g-text-caption-font-weight);
            --_--font-size: var(--g-text-caption-1-font-size);
            --_--line-height: var(--g-text-caption-1-line-height);
        }

        &_s {
            --_--font-weight: var(--g-text-caption-font-weight);
            --_--font-size: var(--g-text-caption-2-font-size);
            --_--line-height: var(--g-text-caption-2-line-height);
        }

        &_m,
        &_l {
            --_--font-weight: var(--g-text-subheader-font-weight);
            --_--font-size: var(--g-text-subheader-1-font-size);
            --_--line-height: var(--g-text-subheader-1-line-height);
        }

        &_xl {
            --_--font-weight: var(--g-text-subheader-font-weight);
            --_--font-size: var(--g-text-subheader-2-font-size);
            --_--line-height: var(--g-text-subheader-2-line-height);
        }

        &_3xs,
        &_2xs {
            --_--border-width: 1.5px;
            --_--inner-border-width: 2.5px;
        }

        &_xs,
        &_s,
        &_m,
        &_l,
        &_xl {
            --_--border-width: 2px;
            --_--inner-border-width: 3px;
        }
    }

    &_theme {
        &_normal {
            &#{$block}_view {
                &_filled {
                    --_--background-color: var(--g-color-base-misc-light);
                    --_--text-color: var(--g-color-text-misc);
                }

                &_outlined {
                    --_--background-color: var(--g-color-base-background);
                    --_--border-color: var(--g-color-text-misc);
                    --_--text-color: var(--g-color-text-misc);
                }
            }
        }

        &_brand {
            &#{$block}_view {
                &_filled {
                    --_--background-color: var(--g-color-base-brand);
                    --_--text-color: var(--g-color-text-brand-contrast);
                }

                &_outlined {
                    --_--background-color: var(--g-color-base-background);
                    --_--border-color: var(--g-color-text-brand);
                    --_--text-color: var(--g-color-text-brand);
                }
            }
        }
    }

    &__image {
        box-sizing: border-box;
        display: block;
        width: 100%;
        height: 100%;
        border-radius: inherit;
        object-fit: cover;

        &_with-border {
            border: 1px solid var(--g-color-line-generic);
        }
    }

    &__icon {
        color: var(--g-avatar-text-color, var(--_--text-color));

        & > svg {
            display: block;
        }
    }

    &__text {
        color: var(--g-avatar-text-color, var(--_--text-color));
        font-weight: var(--g-avatar-font-weight, var(--_--font-weight));
        font-size: var(--g-avatar-font-size, var(--_--font-size));
        line-height: var(--g-avatar-line-height, var(--_--line-height));
    }
}
